Package de.yaams.extensions.basemap.tiled.mapeditor.widget

Source Code of de.yaams.extensions.basemap.tiled.mapeditor.widget.BrushBrowser

/*
* Tiled Map Editor, (c) 2004-2006
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version.
*
* Adam Turk <aturk@biggeruniverse.com> Bjorn Lindeijer <bjorn@lindeijer.nl>
*/

package de.yaams.extensions.basemap.tiled.mapeditor.widget;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.util.Iterator;
import java.util.LinkedList;

import javax.swing.JPanel;
import javax.swing.event.MouseInputAdapter;

import de.yaams.extensions.basemap.tiled.mapeditor.brush.Brush;
import de.yaams.extensions.basemap.tiled.mapeditor.brush.ShapeBrush;

/**
* A panel that allows selecting a brush from a set of presets.
*/
public class BrushBrowser extends JPanel {
  /**
   *
   */
  private static final long serialVersionUID = 6812048304916437730L;
  private int maxWidth = 25;
  private Brush selectedBrush;
  private final LinkedList<Brush> brushes;

  public BrushBrowser() {
    brushes = new LinkedList<Brush>();
    initPresets();

    MouseInputAdapter listener = new MouseInputAdapter() {
      @Override
      public void mousePressed(MouseEvent e) {
        int perLine = getWidth() / maxWidth;
        int x = e.getX() / maxWidth;
        int y = e.getY() / maxWidth;
        int selectedIndex = y * perLine + (x > perLine - 1 ? perLine - 1 : x);

        if (selectedIndex >= 0 && selectedIndex < brushes.size()) {
          Brush previousBrush = selectedBrush;
          selectedBrush = brushes.get(selectedIndex);
          firePropertyChange("selectedbrush", previousBrush, selectedBrush);
          repaint();
        }
      }

      @Override
      public void mouseDragged(MouseEvent e) {
        mousePressed(e);
      }
    };

    addMouseListener(listener);
    addMouseMotionListener(listener);
  }

  @Override
  public Dimension getPreferredSize() {
    int perLine = getWidth() / maxWidth;
    if (perLine > 0) {
      int lines = (brushes.size() + (perLine - 1)) / perLine;
      return new Dimension(maxWidth, maxWidth * lines);
    } else {
      return new Dimension(maxWidth, 150);
    }
  }

  private void initPresets() {
    int[] dimensions = { 1, 2, 4, 8, 12, 20 };

    for (int n = 1; n < dimensions.length; n++) {
      ShapeBrush brush = new ShapeBrush();
      brush.makeCircleBrush(dimensions[n] / 2);
      brushes.add(brush);
    }

    for (int dimension : dimensions) {
      ShapeBrush brush = new ShapeBrush();
      brush.makeQuadBrush(new Rectangle(0, 0, dimension, dimension));
      brushes.add(brush);
    }
  }

  @Override
  public void paint(Graphics g) {
    Rectangle clipRect = g.getClipBounds();
    g.setColor(Color.white);
    g.fillRect(clipRect.x, clipRect.y, clipRect.width, clipRect.height);

    ((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g.setColor(Color.black);

    // Draw the brushes
    Iterator<Brush> itr = brushes.iterator();
    int x = 0;
    while (itr.hasNext()) {
      Brush brush = itr.next();
      Rectangle bb = brush.getBounds();
      float o = maxWidth / 2.0f - bb.width / 2.0f;
      g.translate((int) o, (int) o);
      brush.drawPreview((Graphics2D) g, new Dimension(maxWidth, maxWidth), null);
      g.translate((int) -o, (int) -o);

      if (brush == selectedBrush) {
        g.drawRect(0, 0, maxWidth, maxWidth);
      }

      g.translate(maxWidth, 0);
      x += maxWidth;
      if (x + maxWidth > getWidth()) {
        g.translate(-x, maxWidth);
        x = 0;
      }
    }
  }

  public void setSelectedBrush(Brush selectedBrush) {
    for (Brush brush : brushes) {
      if (brush.equals(selectedBrush)) {
        this.selectedBrush = brush;
        break;
      }
    }
  }

  public Brush getSelectedBrush() {
    return selectedBrush;
  }
}
TOP

Related Classes of de.yaams.extensions.basemap.tiled.mapeditor.widget.BrushBrowser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.